package com.example.design.demo.single;

/**
 * @author lfj
 * @date 2023/11/10 16:55
 * @description 单例模式 -- 懒汉
 * 懒汉式
 *  1.声明实例,但是不初始化
 *  2.在构造方法私有化
 *  3.在调取getInstance进行对象返回的时候,判断对象是否为null,是否初始化完成
 *      3.1 初始化完成,既不为null,那就返回对象,否则进行对象的初始化
 *  缺点:  在多线程的访问中是有问题的 ---不安全
 */
public class SingletonLazy {
    private static SingletonLazy instance = null;

    // 私有构造函数，防止外部实例化
    private SingletonLazy() {}

    public static SingletonLazy getInstance(){
        if(instance==null){
            try {
                Thread.sleep(1);
            } catch (Exception e) {
                e.printStackTrace();
            }
            instance=new SingletonLazy();
        }
        return instance;

    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(()-> {
                System.out.println(instance.getInstance().hashCode());
            }).start();
        }
    }
}
